/* 7-10 公路村村通 (30 分) */
#include<bits/stdc++.h>
using namespace std;
#define vm 1003
#define INF 65535
typedef struct mapo{
    int data[vm][vm];
    int N,M;
}mapo;
int prim(mapo m){
    int min,i,j,k;
    int lowcost[vm];
    int cost = 0;
    lowcost[1] = 0;
    for(i=2;i<=m.N;i++){
        lowcost[i] = m.data[1][i];
    }
    for(i=2;i<=m.N;i++){
        min = INF;
        j=1;k = 0;
        while(j<=m.N){
            if(lowcost[j]!=0&&lowcost[j]<min){
                min = lowcost[j];
                k=j;
            }
            j++;
        }
        if(k==0){
            return -1;
        }
        cost+=min;
        lowcost[k]=0;
        for(j=2;i<=m.N;j++){
            if(lowcost[j]!=0&&m.data[k][j]<lowcost[j]){
                lowcost[j] = m.data[k][j];
            }
        }
    }
    return cost;
}

int main(){
    int x,y,f;
    struct mapo m;
    cin>>m.N>>m.M;
    for(int i=0;i<m.M;i++){
        cin>>x>>y>>f;
        m.data[x][y] = m.data[y][x] = f;
    }
    //Prim算法
    x = prim(m);
    cout<<x<<endl;
    return 0;
}